home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / sendmail / uk-sendmail2.1 / Config < prev    next >
Encoding:
Text File  |  1991-06-11  |  4.9 KB  |  277 lines

  1. #!/bin/sh
  2. #
  3. #  shell script to process a UK-sendmail configuration file and
  4. #  generate a directory containing the relevent m4 files together
  5. #  with a .mc file and Makefile which are used to build a sendmail.cf
  6. #  
  7. if [ $# -ne 1 ]
  8. then
  9.     echo usage: $0 file
  10.     exit 1
  11. elif [ ! -f $1 ]
  12. then
  13.     echo $1: file not found
  14.     exit 1
  15. fi
  16.  
  17. config=`echo $1 | sed 's/^config.//'`
  18. configfile=$1
  19. domfiles=
  20. dombldargs=
  21. chnfiles=
  22. chnbldargs=
  23.  
  24. homedir=`pwd`
  25. configdir=$config
  26. tabledir=$config
  27.  
  28. #
  29. #  transform the configuration file, then read in the resulting file
  30. #
  31. (cat $1; echo) | sed -n '
  32. /#/s/#.*//
  33. /^$/d
  34. : repeat
  35. N
  36. t next
  37. : next
  38. s/\n[     ][     ]*//
  39. t repeat
  40. P
  41. D
  42. ' > /tmp/config.$$
  43.  
  44. exec < /tmp/config.$$
  45.  
  46. #
  47. #  process the configuration file
  48. #
  49. while read cmd arg1 arg2
  50. do
  51.     case $cmd in
  52.     configdir=*|tabledir=*|install=*)
  53.         val=`expr $cmd : '.*/'`
  54.         if [ $val -gt 0 ]
  55.         then
  56.             echo $cmd: must be a subdirectory of this directory
  57.         else
  58.             eval $cmd
  59.         fi
  60.         ;;
  61.     config=*|domain=*|postmaster=*)
  62.         eval $cmd
  63.         var=`expr $cmd : '\(.*\)=.*' | tr '[a-z]' '[A-Z]'`
  64.         eval val=$`expr $cmd : '\(.*\)=.*'`
  65.         echo "define(\`$var',\`$val')dnl" >> /tmp/config.$$.mc
  66.         ;;
  67.     options=*)
  68.         eval $cmd
  69.         opts=`echo $options | tr '[a-z]' '[A-Z]'`
  70.         oldifs=$IFS ; IFS="," ; set $opts ; IFS=$oldifs
  71.  
  72.         for i in $*
  73.         do
  74.             echo "define(\`$i')dnl" >> /tmp/config.$$.mc
  75.         done
  76.         ;;
  77.     domain)
  78.         if [ "$arg1" != "std" ]
  79.         then
  80.             dombldargs="$dombldargs-$arg1"
  81.         fi
  82.  
  83.         eval $arg2
  84.         domfiles="$domfiles $file "
  85.         dombldargs="$dombldargs $file "
  86.         ;;
  87.     channel)
  88.         chn=`echo $arg1 | tr '[a-z]' '[A-Z]'`
  89.         file=
  90.         ldomain='$J'
  91.         ida=
  92.  
  93.         oldifs=$IFS ; IFS="," ; set $arg2 ; IFS=$oldifs
  94.  
  95.         for i in $*
  96.         do
  97.             case $i in
  98.             file=*|ldomain=*)
  99.                 eval $i
  100.                 ;;
  101.             ida)    ida="-ida "
  102.                 ;;
  103.             sysname=*|pgm=*)
  104.                 eval $i
  105.                 var=${chn}`expr $i : '\(.*\)=.*' | tr '[a-z]' '[A-Z]'`
  106.                 eval val=$`expr $i : '\(.*\)=.*'`
  107.                 echo "define(\`$var',\`$val')dnl" >> /tmp/config.$$.mc
  108.                 ;;
  109.             *)    opt=${chn}`echo $i | tr '[a-z]' '[A-Z]'`
  110.                 echo "define(\`$opt')dnl" >> /tmp/config.$$.mc
  111.                 ;;
  112.             esac
  113.         done
  114.  
  115.         chnfiles="$chnfiles $file "
  116.         chnbldargs="$chnbldargs$ida-$arg1 $file "
  117.  
  118.         if [ $arg1 != "top" ]
  119.         then
  120.             echo "define(\`${chn}NAME',\`$ldomain')dnl" >> /tmp/config.$$.mc
  121.         fi
  122.         ;;
  123.     esac
  124.  
  125. done
  126.  
  127. rm /tmp/config.$$
  128.  
  129. #
  130. #  add a makefile for compiling tables in the tables directory
  131. #
  132. if [ ! -d $tabledir ]
  133. then
  134.     echo -n "
  135. Making directory $tabledir ... "
  136.     mkdir $tabledir
  137.     if [ $? -ne 0 ]
  138.     then    echo mkdir failed, aborted
  139.         exit 1
  140.     fi
  141. fi
  142.  
  143. cd $tabledir
  144. echo -n "
  145. creating $tabledir/$config.mk ... "
  146.  
  147. cat > $config.mk <<EOF
  148. ############################################################
  149. #
  150. #    Makefile to compile sendmail tables for $config
  151. #
  152. ############################################################
  153.  
  154. DOMFILES=$domfiles
  155. DOMBLDARGS=$dombldargs
  156.  
  157. CHNFILES=$chnfiles
  158. CHNBLDARGS=$chnbldargs
  159.  
  160. $config:    $config-dom.m4 $config-chn.m4
  161.  
  162. $config-dom.m4:    $(DOMFILES) $config.mk
  163.         ../Dombuild -o $config-dom.m4 $(DOMBLDARGS) 
  164.  
  165. $config-chn.m4:    $(CHNFILES) $config.mk
  166.         ../Chnbuild -o $config-chn.m4 $(CHNBLDARGS)
  167.  
  168. edit:
  169.         \$\${VISUAL-vi} $(CHNFILES)
  170.         \$\${VISUAL-vi} $(DOMFILES)
  171.  
  172. tidy:
  173.         -rm -f [0-9]*.*
  174.  
  175. check:        $(CHNFILES) $(DOMFILES)
  176.         ../Chncheck $(CHNFILES)
  177.         ../Domcheck $(DOMFILES)
  178. EOF
  179.  
  180. cd $homedir
  181.  
  182. #
  183. #  create the sendmail configuration directory
  184. #
  185. if [ ! -d $configdir ]
  186. then
  187.     echo -n "
  188. Making directory $configdir ... "
  189.     mkdir $configdir
  190.     if [ $? -ne 0 ]
  191.     then    echo mkdir failed, aborted
  192.         exit 1
  193.     fi
  194. fi
  195.  
  196. cd $configdir
  197. echo -n "
  198. creating configuration files in $configdir ... "
  199.  
  200. #
  201. #  copy the relevent m4 files into the directory
  202. #
  203. ar x ../Rules.a
  204.  
  205. if [ -f localise.sh ]
  206. then    echo -n "
  207. running localise.sh in $configdir ... "
  208.     ./localise.sh
  209. fi
  210.  
  211. #
  212. #  create the Makefile
  213. #
  214. cat >Makefile <<EOF
  215. ########################################################################
  216. #
  217. #    Makefile for Sendmail configuration files
  218. #
  219. #    @(#)Makefile    UK-2.1 sendmail configuartion        18/11/88
  220. #
  221. ########################################################################
  222. RULES=base.m4 rules.m4 mailers.m4 version.m4
  223.  
  224. TBLDIR=../$tabledir
  225. DOM_M4FILE=$config-dom.m4
  226. CHN_M4FILE=$config-chn.m4
  227.  
  228. .SUFFIXES: .mc .cf
  229.  
  230. .mc.cf:
  231.     -@mv \$*.cf \$*.cf.old
  232.     m4 \$*.mc > \$*.cf
  233.  
  234. $config:    $(TBLDIR)/$config.mk
  235.         cd $(TBLDIR); make -f $config.mk $config
  236.         make $config.cf
  237.  
  238. $(TBLDIR)/$config.mk:    ../$configfile
  239.         ( cd ..; Config $configfile )
  240.  
  241. $config.cf:    $(RULES) $(DOM_M4FILE) $(CHN_M4FILE) $(TBLDIR)/$config.mk
  242.  
  243. $(DOM_M4FILE):    $(TBLDIR)/$(DOM_M4FILE)
  244.         cp $(TBLDIR)/$(DOM_M4FILE) .
  245.  
  246. $(CHN_M4FILE):    $(TBLDIR)/$(CHN_M4FILE)
  247.         cp $(TBLDIR)/$(CHN_M4FILE) .
  248.  
  249. install:
  250.         sh ../Install.sh $install $config
  251.  
  252. test:
  253.         /usr/lib/sendmail -bt -C$config.cf
  254.  
  255. edit check tidy: $(TBLDIR)/$config.mk
  256.         cd $(TBLDIR); make -f $config.mk \$@
  257.  
  258. diff:        $config.cf $config.cf.old
  259.         wc $config.cf.old $config.cf
  260.         diff $config.cf.old $config.cf
  261. EOF
  262.  
  263. #
  264. #  create the config.mc file
  265. #
  266. mv /tmp/config.$$.mc $config.mc
  267. cat >> $config.mc <<EOF
  268. include(base.m4)
  269. include(rules.m4)
  270. include($config-dom.m4)
  271. include($config-chn.m4)
  272. include(mailers.m4)
  273. EOF
  274.  
  275. echo
  276. exit
  277.